这段代码来自libHaru库，主要涉及3D注释（3D Annotation）的扩展数据（ExData）处理。libHaru是一个用于生成PDF文件的开源库，支持多种特性，包括3D模型的嵌入和注释。以下是对代码中函数的解释：

1. **HPDF_3DAnnotExData_New**: 这个函数用于创建一个新的3D注释的扩展数据（ExData）对象。扩展数据是PDF中用于存储额外信息的字典，特别是对于一些复杂元素，如3D模型。函数接受内存管理器（`mmgr`）和交叉引用表（`xref`）作为参数，创建一个新字典并添加到交叉引用表中。字典中包含了类型（Type）和子类型（Subtype）字段，分别设置为"ExData"和"3DM"，表明这是一个与3D模型相关的扩展数据。

2. **HPDF_3DAnnotExData_Set3DMeasurement**: 这个函数用于在3D注释的扩展数据中设置3D测量信息（`measure`）。3D测量可以是3D模型上的距离、角度或其他几何属性的测量。函数接收扩展数据（`exdata`）和3D测量对象（`measure`）作为参数，将测量对象添加到扩展数据字典中，键名为"M3DREF"。这使得在PDF中可以引用具体的3D测量信息。

这些函数共同支持在PDF文档中嵌入3D模型，并为这些模型添加注释和测量信息，增强了PDF文档的交互性和信息丰富度。通过使用这些函数，开发者可以利用libHaru库在PDF文件中实现复杂的3D可视化和注释功能。/*
 * << Haru Free PDF Library >> -- hpdf_annotation.c
 *
 * URL: http://libharu.org
 *
 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.
 * It is provided "as is" without express or implied warranty.
 *
 */

#include "hpdf_conf.h"
#include "hpdf_utils.h"
#include "hpdf_info.h"
#include "hpdf_exdata.h"
#include "hpdf.h"

/*----------------------------------------------------------------------------*/
/*------ HPDF_ExData -----------------------------------------------------*/



HPDF_ExData
HPDF_3DAnnotExData_New(HPDF_MMgr mmgr,
					   HPDF_Xref xref)
{
	HPDF_ExData exdata;
	HPDF_STATUS ret = HPDF_OK;


	HPDF_PTRACE((" HPDF_ExData_New\n"));

	exdata = HPDF_Dict_New (mmgr);
	if (!exdata)
		return NULL;

	if (HPDF_Xref_Add (xref, exdata) != HPDF_OK)
		return NULL;

	ret += HPDF_Dict_AddName (exdata, "Type", "ExData");
	ret += HPDF_Dict_AddName (exdata, "Subtype", "3DM");

	if (ret != HPDF_OK)
		return NULL;

	return exdata;
}



HPDF_EXPORT(HPDF_STATUS)
HPDF_3DAnnotExData_Set3DMeasurement(HPDF_ExData exdata, 
						   HPDF_3DMeasure measure)
{
	HPDF_STATUS ret = HPDF_OK;

	ret = HPDF_Dict_Add (exdata, "M3DREF", measure);
	if (ret != HPDF_OK)
		return ret;

	return ret;
}

